home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src.arc / GLOBAL.H < prev    next >
C/C++ Source or Header  |  1989-08-18  |  4KB  |  145 lines

  1. #ifndef    MAXINT16
  2.  
  3. /* Global definitions used by every source file.
  4.  * Some may be compiler dependent.
  5.  */
  6.  
  7. #if    defined(__TURBOC__) || defined(__STDC__)
  8. #define    ANSIPROTO    1
  9. #endif
  10.  
  11. #ifdef    ANSIPROTO
  12. #define    __ARGS(x)    x
  13. #else
  14. #define    __ARGS(x)    ()
  15. #endif
  16.  
  17.  
  18. #if    (defined(LATTICE) || defined(MAC) || defined(__TURBOC__))
  19. /* These compilers require special open modes when reading binary files.
  20.  * 
  21.  * "The single most brilliant design decision in all of UNIX was the
  22.  * choice of a SINGLE character as the end-of-line indicator" -- M. O'Dell
  23.  *
  24.  * "Whoever picked the end-of-line conventions for MS-DOS and the Macintosh
  25.  * should be shot!" -- P. Karn's corollary to O'Dells' declaration
  26.  */
  27. #define    READ_BINARY    "rb"
  28. #define    WRITE_BINARY    "wb"
  29. #define    READ_TEXT    "rt"
  30. #define    WRITE_TEXT    "wt"
  31. #define    APPEND_TEXT    "at+"
  32.  
  33. #else
  34.  
  35. #define    READ_BINARY    "r"
  36. #define    WRITE_BINARY    "w"
  37. #define    READ_TEXT    "r"
  38. #define    WRITE_TEXT    "w"
  39. #define    APPEND_TEXT    "a+"
  40.  
  41. #endif
  42.  
  43. /* These two lines assume that your compiler's longs are 32 bits and
  44.  * shorts are 16 bits. It is already assumed that chars are 8 bits,
  45.  * but it doesn't matter if they're signed or unsigned.
  46.  */
  47. typedef long int32;        /* 32-bit signed integer */
  48. typedef unsigned short int16;    /* 16-bit unsigned integer */
  49. #define    uchar(x) ((unsigned char)(x))
  50. #define    MAXINT16 65535        /* Largest 16-bit integer */
  51.  
  52. /* The "interrupt" keyword is non-standard, so make it configurable */
  53. #ifdef    __TURBOC__
  54. #define    INTERRUPT    void interrupt
  55. #else
  56. #define    INTERRUPT    void
  57. #endif
  58.  
  59. /* Note that these definitions are on by default if none of the Turbo-C style
  60.  * memory model definitions are on; this avoids having to change them when
  61.  * porting to 68K environments.
  62.  */
  63. #if    !defined(__TINY__) && !defined(__SMALL__) && !defined(__MEDIUM__)
  64. #define    LARGEDATA    1
  65. #endif
  66.  
  67. #if    !defined(__TINY__) && !defined(__SMALL__) && !defined(__COMPACT__)
  68. #define    LARGECODE    1
  69. #endif
  70.  
  71. /* Since not all compilers support structure assignment, the ASSIGN()
  72.  * macro is used. This controls how it's actually implemented.
  73.  */
  74. #ifdef    NOSTRUCTASSIGN    /* Version for old compilers that don't support it */
  75. #define    ASSIGN(a,b)    memcpy((char *)&(a),(char *)&(b),sizeof(b));
  76. #else            /* Version for compilers that do */
  77. #define    ASSIGN(a,b)    ((a) = (b))
  78. #endif
  79.  
  80. /* Define null object pointer in case stdio.h isn't included */
  81. #ifndef    NULL
  82. /* General purpose NULL pointer */
  83. #define    NULL (void *)0
  84. #endif
  85. #define    NULLCHAR (char *)0    /* Null character pointer */
  86. #define    NULLCHARP (char **)0    /* Null character pointer pointer */
  87. #define    NULLINT    (int *)0    /* Null integer pointer */
  88. #define    NULLFP     (int (*)())0    /* Null pointer to function returning int */
  89. #define    NULLVFP     (void (*)())0    /* Null pointer to function returning void */
  90. #define    NULLVIFP (INTERRUPT (*)())0
  91. #define    NULLFILE (FILE *)0    /* Null file pointer */
  92.  
  93. /* Extract a short from a long */
  94. #define    hiword(x)    ((int16)((x) >> 16))
  95. #define    loword(x)    ((int16)(x))
  96.  
  97. /* Extract a byte from a short */
  98. #define    hibyte(x)    ((unsigned char)((x) >> 8))
  99. #define    lobyte(x)    ((unsigned char)(x))
  100.  
  101. /* Extract nibbles from a byte */
  102. #define    hinibble(x)    (((x) >> 4) & 0xf)
  103. #define    lonibble(x)    ((x) & 0xf)
  104.  
  105. /* Various low-level and miscellaneous functions */
  106. int dirps __ARGS((void));
  107. void freeargs __ARGS((int argc,char *argv[]));
  108. int getopt __ARGS((int argc,char *argv[],char *opts));
  109. int htoi __ARGS((char *));
  110. long htol __ARGS((char *));
  111. void initroot __ARGS((char *root));
  112. void log __ARGS((int s,char *fmt, ...));
  113. void *ltop __ARGS((long));
  114. long ptol __ARGS((void *));
  115. void restore __ARGS((int));
  116. void rip __ARGS((char *));
  117. char *smsg __ARGS((char *msgs[],unsigned nmsgs,unsigned n));
  118. #if    !defined __TURBOC__
  119. char *strdup __ARGS((const char *));
  120. #endif
  121.  
  122. #include <stdlib.h>
  123. #include <string.h>
  124.  
  125. #ifdef    AZTEC
  126. #define    rewind(fp)    fseek(fp,0L,0);
  127. #endif
  128.  
  129. #ifdef    __TURBOC__
  130. #define movblock(so,ss,do,ds,c)    movedata(ss,so,ds,do,c)
  131. #define outportw outport
  132. #define inportw inport
  133.  
  134. #else
  135.  
  136. /* General purpose function macros already defined in turbo C */
  137. #define    min(x,y)    ((x)<(y)?(x):(y))    /* Lesser of two args */
  138. #define    max(x,y)    ((x)>(y)?(x):(y))    /* Greater of two args */
  139. #define MK_FP(seg,ofs)    ((void far *) \
  140.                (((unsigned long)(seg) << 16) | (unsigned)(ofs)))
  141. #endif    /* __TURBOC __ */
  142.  
  143. #endif    /* MAXINT16 */
  144.  
  145.